package com.eastedu.superise.handler.question.handler;

import java.util.regex.Pattern;

/**
 * The type Pattern util.
 *
 * @author Administrator
 */
public class PatternConstant {

    /**
     * 8/16个固定个数的空格，中英文括号、中括号（中间2个全角空格）
     */
    public static final String SPACE = "(?<!_)_{8}(?!_)|(?<!\\s)\\s{8}(?!\\s)|(?<!_)_{16}(?!_)|(?<!\\s)\\s{16}(?!\\s)|\\(\\u3000{2}\\)|（\\u3000{2}）|\\[\\u3000{2}]";

    /**
     * 中英文括号（中间数字）
     */
    public static final String ORDER = "\\([1-9]\\d*\\)|（[1-9]\\d*）";

    /**
     * 分隔并保留分隔符（新增中括号）,这里数字序号正则不能为[1-9]\d*，否则分组失败
     */
    public static final String SPIT_WITH_ORDER_AND_SPACE_AND_KEEP_SEPARATOR = "(?<=\\([1-9][0-9]{0,2}\\)|（[1-9][0-9]{0,2}）)|(?=\\([1-9][0-9]{0,2}\\)|（[1-9][0-9]{0,2}）)|(?<=" + SPACE + ")|(?=" + SPACE + ")";

    /**
     * 中英文括号的序号开头
     */
    public static final String START_WITH_ORDER = "^(" + ORDER + ")";

    /**
     * 匹配序号开头
     */
    public static final Pattern START_WITH_ORDER_PATTERN = Pattern.compile(START_WITH_ORDER);

    /**
     * 匹配序号和空格（新增中括号）
     */
    public static final Pattern ORDER_AND_SPACE_PATTERN = Pattern.compile("(?<order>" + ORDER + ")|(?<space>" + SPACE + ")");


    /**
     * ==============================================================================
     * 作答区域括号正则()
     * 这个不能使用*来匹配多个空格，因为(正向前瞻(?<=)和正向后瞻(?=)不支持*
     */
    public static final String ANSWER_PARENTHESES_REGX = "[(（][\\s\\u3000 ]{0,20}[）)]";

    /**
     * 以作答区域为单位分隔并保留分隔符
     * (正向前瞻(?<=)和正向后瞻(?=)不消耗字符，即匹配到的内容不会被分隔符替换掉)
     */
    public static final String SPIT_WITH_PARENTHESES_AND_KEEP_SEPARATOR = "(?<=" + ANSWER_PARENTHESES_REGX + ")|(?=" + ANSWER_PARENTHESES_REGX + ")";
    /**
     * 选择作答区域正则匹配
     * <p>
     * 1. 客观题题干中的空白括号（一般都在结尾，不排除特殊情况）
     * 2. 客观题题干中的下滑横线且横线上方无内容（可先处理了条件1后来看对应题型数量与已处理的数量差值来决定是否继续第二步）
     */
    public static final Pattern ANSWER_PARENTHESES_PATTERN = Pattern.compile("(?<parentheses>" + ANSWER_PARENTHESES_REGX + ")");

    /**
     * -------------------------------------------------------------------------------------------
     * 作答区域括号正则下划线
     * 4个以上的空格, 2个以上的中文空格\u3000, 4个以上的英文空格
     */
    public static final String ANSWER_PARENTHESES_BLANK_REGX = "(?<!\\s)\\s{4,}(?!\\s)|(?<!\\u3000)\\u3000{2,}(?!\\u3000)|(?<! ) {4,}(?! )";
    /**
     * 4个以上的下划线_
     */
    public static final String ANSWER_PARENTHESES_UNDERLINE_REGX = "(?<!_)_{4,}(?!_)";
    /**
     * The constant SPIT_WITH_PARENTHESES_UNDERLINE_AND_KEEP_SEPARATOR.
     */
    public static final String SPIT_WITH_PARENTHESES_UNDERLINE_AND_KEEP_SEPARATOR = "(?<=" + ANSWER_PARENTHESES_BLANK_REGX + "|" + ANSWER_PARENTHESES_UNDERLINE_REGX + ")|(?=" + ANSWER_PARENTHESES_BLANK_REGX + "|" + ANSWER_PARENTHESES_UNDERLINE_REGX + ")";
    /**
     * The constant ANSWER_PARENTHESES_UNDERLINE_PATTERN.
     */
    public static final Pattern ANSWER_PARENTHESES_UNDERLINE_PATTERN = Pattern.compile("(?<parentheses>" + ANSWER_PARENTHESES_BLANK_REGX + "|" + ANSWER_PARENTHESES_UNDERLINE_REGX + ")");
}
